package com.vcoud.mundialbrasil2014;

import java.util.ArrayList;
import java.util.HashMap;

import android.database.Cursor;
import android.database.SQLException;
import android.os.AsyncTask;
import android.os.AsyncTask.Status;
import android.os.Bundle;
import android.os.StrictMode;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import com.vcoud.mbrasil2014.R;
import com.vcoud.mundialbrasil2014.adapter.DetallePartidoAdapter;

public class DetallePartidoFragment extends Fragment {

	public CargardorImagen cargarImagen;

	Long mEquipoLocal;
	Long mEquipoVisitante;
	String mRutaBanderaLocal;
	String mRutaBanderaVisitante;
	String mNombreEquipoLocal;
	String mNombreEquipoVisitante;
	int mGolPenalLocal;
	int mGolPenalVisitante;
	int mGolLocal;
	int mGolVisitante;

	static final String KEY_GOL_IDGOL = "IDGol";
	static final String KEY_GOL_FK_JUGADOR = "FK_Jugador";
	static final String KEY_GOL_FK_PARTIDO = "FK_Partido";
	static final String KEY_GOL_MINUTO = "Minuto";
	static final String KEY_GOL_AUTOGOL = "AutoGol";
	static final String KEY_GOL_RUTAVIDEO = "RutaVideo";
	static final String KEY_GOL_FK_EQUIPO = "FK_Equipo";

	static final String KEY_JUGADOR_NOMBRE = "Nombre";

	static final String AWAY_TEAM = "Away_Team";

	ArrayList<HashMap<String, String>> lista = new ArrayList<HashMap<String, String>>();

	public DetallePartidoFragment() {
	}

	ActualizacionService actualizacion;
	ActualizarSegundoPlano actualizar = new ActualizarSegundoPlano();
	Boolean actualizacionFinalizada = true;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
				.detectDiskReads().detectDiskWrites().detectNetwork()
				.penaltyLog().build());
		setHasOptionsMenu(true);
		actualizacion = new ActualizacionService(this.getActivity());

		try {
			cargarImagen = new CargardorImagen(super.getActivity()
					.getApplicationContext());
			Bundle args = getArguments();
			Long mIDPartido = args.getLong("IDPartido");
			actualizacion.actualizarGolPorPartido(mIDPartido);
			DB db = new DB(getActivity());
			db.abrir();

			Cursor c = db.obtenerPartido(mIDPartido);
			mEquipoLocal = c.getLong(1);
			mEquipoVisitante = c.getLong(2);
			Cursor cL = db.obtenerEquipo(mEquipoLocal);
			Cursor cV = db.obtenerEquipo(mEquipoVisitante);
			mNombreEquipoLocal = cL.getString(1);
			mNombreEquipoVisitante = cV.getString(1);
			mRutaBanderaLocal = cL.getString(2);
			mRutaBanderaVisitante = cV.getString(2);
			cL.close();
			cV.close();
			mGolLocal = db.obtenerGoles(mEquipoLocal, mIDPartido);
			mGolVisitante = db.obtenerGoles(mEquipoVisitante, mIDPartido);
			mGolPenalLocal = db.obtenerGolesPenal(mEquipoLocal, mIDPartido);
			mGolPenalVisitante = db.obtenerGolesPenal(mEquipoVisitante, mIDPartido);
			Cursor cG = db.obtenerGolesPartido(mIDPartido);

			if (cG.moveToFirst()) {
				do {
					// Creando un nuevo HashMap
					HashMap<String, String> map = new HashMap<String, String>();
					// agregando cada hijo al key map
					try {
						Cursor cJ = db.obtenerJugador(cG.getLong(1));
						map.put(KEY_GOL_IDGOL, cG.getString(0));
						map.put(KEY_JUGADOR_NOMBRE, cJ.getString(1));
						map.put(KEY_GOL_MINUTO, cG.getString(3));
						map.put(KEY_GOL_AUTOGOL, cG.getString(4));
						if (mEquipoLocal == cG.getInt(6)) {
							map.put(AWAY_TEAM, "0");
						} else if (mEquipoVisitante == cG.getInt(6)) {
							map.put(AWAY_TEAM, "1");
						}
					} catch (SQLException e) {

						e.printStackTrace();
					}
					// agregando elementos al array
					lista.add(map);
				} while (cG.moveToNext());
			}
			cG.close();
			c.close();
			db.cerrar();
		} catch (SQLException e) {

			e.printStackTrace();
		}
	}

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		View rootView = inflater.inflate(R.layout.fragment_detalle_partido,
				container, false);
		DetallePartidoAdapter adapter = new DetallePartidoAdapter(
				super.getActivity(), lista);

		ImageView ivBanderaLocal = (ImageView) rootView
				.findViewById(R.id.bandera_local);
		ImageView ivBanderaVisitante = (ImageView) rootView
				.findViewById(R.id.bandera_visitante);
		cargarImagen.mostrarImagen(mRutaBanderaLocal, ivBanderaLocal);
		cargarImagen.mostrarImagen(mRutaBanderaVisitante, ivBanderaVisitante);
		TextView tvEquipoLocal = (TextView) rootView
				.findViewById(R.id.equipo_local);
		TextView tvEquipoVisitante = (TextView) rootView
				.findViewById(R.id.equipo_visitante);
		TextView tvGolLocal = (TextView) rootView.findViewById(R.id.gol_local);
		TextView tvGolVisitante = (TextView) rootView
				.findViewById(R.id.gol_visitante);
		TextView tvGolPenal = (TextView) rootView.findViewById(R.id.gol_penal);
		tvEquipoLocal.setText(mNombreEquipoLocal);
		tvEquipoVisitante.setText(mNombreEquipoVisitante);
		tvGolLocal.setText(String.valueOf(mGolLocal));
		tvGolVisitante.setText(String.valueOf(mGolVisitante));
		if (mGolPenalLocal > 0 || mGolPenalVisitante > 0){
			tvGolPenal.setVisibility(View.VISIBLE);
			tvGolPenal.setText("(p. " + mGolPenalLocal + " - " + mGolPenalVisitante + ")");
		}
		ListView list = (ListView) rootView.findViewById(R.id.lista_detalles);

		list.setAdapter(adapter);

		return rootView;
	}

	@Override
	public void onPrepareOptionsMenu(Menu menu) {
		menu.findItem(R.id.action_refresh).setVisible(actualizacionFinalizada);
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case R.id.action_refresh:
			actualizar = new ActualizarSegundoPlano();
			actualizar.execute();
			return true;
		default:
			return super.onOptionsItemSelected(item);
		}
	}

	@Override
	public void onPause() {
		super.onPause();
		getActivity().setProgressBarIndeterminateVisibility(false);
		if (actualizar.getStatus() == Status.RUNNING) {
			actualizar.cancel(true);
		}

	}

	@Override
	public void onResume() {
		super.onResume();
		actualizacionFinalizada = true;
		getActivity().invalidateOptionsMenu();
	}

	private class ActualizarSegundoPlano extends
			AsyncTask<String, Void, Boolean> {

		@Override
		protected void onPreExecute() {
			getActivity().setProgressBarIndeterminateVisibility(true);
			actualizacionFinalizada = false;
			getActivity().invalidateOptionsMenu();
			Toast.makeText(getActivity().getBaseContext(),
					getString(R.string.inicio_actualizando), Toast.LENGTH_SHORT)
					.show();
		}

		@Override
		protected Boolean doInBackground(String... equipos) {
			return actualizacion.actualizarGol();
		}

		@Override
		protected void onPostExecute(Boolean result) {
			if (result) {
				final FragmentTransaction ft = getActivity()
						.getSupportFragmentManager().beginTransaction();
				Fragment fr = null;
				fr = getActivity().getSupportFragmentManager()
						.findFragmentByTag("detalle_partido");
				ft.detach(fr).attach(fr).commit();
				actualizacionFinalizada = true;
				getActivity().invalidateOptionsMenu();
				getActivity().setProgressBarIndeterminateVisibility(false);
			} else {
				Toast.makeText(getActivity().getBaseContext(),
						getString(R.string.inicio_sin_conexion),
						Toast.LENGTH_SHORT).show();
				actualizacionFinalizada = true;
				getActivity().invalidateOptionsMenu();
				getActivity().setProgressBarIndeterminateVisibility(false);
			}
		}
	}

}
